package day_04_05_BlockingQueue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * @Description 阻塞队列
 * @Author shihan
 * @Date 2020/11/1 21:16
 * @Version 1.0
 *【阻塞队列】
 * 1、当队列 为空 时，从队列 获取内容 的线程，将 被阻塞；
 * 2、当队列 已满 时，往队列里 放东西 的线程，将 被阻塞；
 */
public class BlockingQueueDemo {

    public static void main(String[] args) {
        // 数组类型的 BlockingQueue 实现类，实例化时要先给出默认的初始长度；
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);

        // 需要注意的是，新增元素时的返回值 & 队列满后再往里放内容时，是怎么处理的；（同理移除元素时也一样--详见"BlockingQueue核心方法.png"）
        //【第一组操作】：
        // --新增操作成功，返回值为 true
        System.out.println(blockingQueue.add("a"));
        System.out.println(blockingQueue.add("b"));
        System.out.println(blockingQueue.add("c"));

        // --队列已满，操作失败的处理：java.lang.IllegalStateException: Queue full
        //System.out.println(blockingQueue.add("d"));

        // --将队首元素移除，如果当前队列内没有元素，则会报 java.util.NoSuchElementException
        //System.out.println(blockingQueue.remove());

        // --element() 查看队首元素内容（有内容则正常返回，没有内容则返回 null）
        //System.out.println(blockingQueue.element());

    }
}
